#include <iostream>
using std::cout;
using std::endl;
class Complex{
public:
    Complex(int real, int image)
    :_real(real)
    ,_image(image)
    {

    }
    Complex(const Complex & rhs)
    :_real(rhs._real)
    ,_image(rhs._image)
    {
        cout << "Complex(const Complex &)" << endl;
    }

    void print(){
        cout << _real << "+" << _image << "i" << endl;
    }

    //+=运算符重载函数
    Complex & operator+=(const Complex & c2){
        _real += c2._real;
        _image += c2._image;
        return *this;
    }

private:
    int _real;
    int _image;
};


void test(){
    Complex c1(1, 2), c2(3, 4);
    // c1 = c1 + c2;
    // 必须编写一个运算符重载函数，才可以处理下面的逻辑
    // 1.应该使用何种形式？应该使用成员函数的形式
    // 2.函数的详细参数列表、返回值应该是什么样的？
    c1.print();
    cout << &c1 << endl;
    //c1 += c2实际上操作过后并没有去接收该函数的返回结果
    //所以地址是一致的
    //代码编写的时候是+=
    //但是实际上编译器处理的时候调用的是c1.operator+=(c2);
    c1 += c2;
    Complex & result = (c1 += c2);
    c1.print();
    cout << &c1 << endl;
    cout << &result << endl;
}

int main()
{
    test();
    return 0;
}

